home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-05 / netpq203.zip / GETDATA.C < prev    next >
Text File  |  1993-03-02  |  6KB  |  202 lines

  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. #include "nos.h"
  5. #include "noslib.h"
  6. #include "netpq.h"
  7. #include "proto.h"
  8.  
  9. extern struct serverdef *server;
  10. extern struct localqueuedef *localqueue;
  11.  
  12. extern int currentserver, adaptornum, numberoflogins, currentprinter, found;
  13. extern int queuejobcount, printjobcount;
  14. extern int maxlocalqueuecount, localqueuecount;
  15. extern int plotterflag;
  16.  
  17. extern struct PS serverps;
  18. extern struct queue_entry serverqe;
  19. extern struct time_block servertime;
  20. extern struct user_account serveraccount;
  21.  
  22. int status_priority [] =
  23.     {
  24.     8,                    // "FREE",
  25.     3,                    // "UPDATING",
  26.     4,                    // "HOLDING",
  27.     2,                    // "WAITING",
  28.     0,                    // "DESPOOLING",
  29.     5,                    // "CANCELLED",
  30.     6,                    // "FILE ERROR",
  31.     7,                    // "SPOOL ERROR",
  32.     1                    // "* RUSH *"
  33.     };
  34.  
  35.  
  36.  
  37.  
  38. void getserverinfo ()
  39.     {
  40.     //    Loop through each server that the user is logged into
  41.  
  42.     purgelocalqueue ();
  43.  
  44.     currentserver = 0;
  45.     localqueuecount = 0;
  46.  
  47.     while (currentserver < numberoflogins)
  48.     {
  49.     //  Record the Server's Date & Time
  50.  
  51.     if (NOSGetTime (&servertime, server [currentserver] .servername) == -1)
  52.         {
  53.         printf ("%d %s\n", currentserver, server [currentserver] .servername);
  54.         NOSperror ("NOSGetTime");
  55.         exit (1);
  56.         }
  57.     else
  58.         server [currentserver] .time = servertime;
  59.  
  60.     //  Loop through each of the 5 possible printers on the server
  61.     //  and record status of printer
  62.  
  63.     currentprinter = 0;
  64.     while (currentprinter < 5)
  65.         {
  66.         if (NOSGetStatus (¤tprinter, &serverps, server [currentserver] .servername) == -1)
  67.         {
  68.         NOSperror ("NOSGetStatus");
  69.         exit (1);
  70.         }
  71.         fixstatus ();
  72.         server [currentserver] .PS_state_pause [currentprinter - 1] = serverps .PS_state.PS_state_pause;
  73.         server [currentserver] .PS_state_value [currentprinter - 1] = serverps .PS_state.PS_state_value;
  74.         server [currentserver] .PS_index [currentprinter - 1] = serverps .PS_index;
  75.         server [currentserver] .PS_CPS [currentprinter - 1] = serverps .PS_CPS;
  76.         server [currentserver] .PS_output_chars [currentprinter - 1] = serverps .PS_output_chars;
  77.         }
  78.     currentserver++;
  79.     }
  80.  
  81.     currentserver = 0;
  82.     localqueuecount = 0;
  83.  
  84.     while (currentserver < numberoflogins)
  85.     {
  86.     //    Check queue for presence of printer files in the server queue
  87.  
  88.     queuejobcount = 0;
  89.     printjobcount = 0;
  90.  
  91.     while (NOSGetQueue (&queuejobcount, &serverqe, server [currentserver] .servername) != -1)
  92.         {
  93.         if (serverqe .QE_type == QE_type_print)
  94.         {
  95.         if (
  96.            (!plotterflag) ||
  97.            (strcmp (serverqe .QE_destination, plotterstring) == 0)
  98.            )
  99.             {
  100.             if (localqueuecount >= maxlocalqueuecount)
  101.             {
  102.             if ( (localqueue = (struct localqueuedef *)
  103.                 realloc (localqueue, numberoflogins,
  104.                 localqueuecount * sizeof (struct localqueuedef)))
  105.                 ==  (struct localqueuedef *) 0)
  106.                 {
  107.                 printf ("Couldn't reallocate space\n");
  108.                 exit (1);
  109.                 }
  110.             maxlocalqueuecount++;
  111.             }
  112.  
  113.             //if present, copy information to localqueue
  114.  
  115.             localqueue [localqueuecount] .qe = serverqe;
  116.             sprintf (localqueue [localqueuecount] .sequencestring, "%6lu\0", serverqe .QE_sequence);
  117.  
  118.             localqueue [localqueuecount] .server    = currentserver;
  119.             localqueue [localqueuecount] .sort_order = status_priority [serverqe .QE_status] * 100000 + serverqe .QE_sequence;
  120.             localqueue [localqueuecount] .printer = -1;
  121.  
  122.             //if waiting or downloading, find out which printer it's on
  123.  
  124.             if (serverqe .QE_status == 4)
  125.             {
  126.             currentprinter = 0;
  127.             found = false;
  128.  
  129.             while ( (currentprinter < 5) && (found == false) )
  130.                 {
  131.                 if ( (server [currentserver] .PS_state_value [currentprinter] != 0) &&
  132.                  (server [currentserver] .PS_index [currentprinter] == (queuejobcount - 1) ) )
  133.                 {
  134.                 localqueue [localqueuecount] .printer = currentprinter;
  135.                 found = true;
  136.                 }
  137.                 currentprinter++;
  138.                 }
  139.             }
  140.             printjobcount++;
  141.             localqueuecount++;
  142.             }
  143.         }
  144.         }
  145.     server [currentserver] .queue_jobs = printjobcount;
  146.     currentserver++;
  147.     }
  148.     qsort ( (void *) localqueue, localqueuecount, sizeof (struct localqueuedef), compareDWORD);
  149.  
  150.     }
  151.  
  152.  
  153.  
  154. void purgelocalqueue ()
  155.     {
  156.     int i;
  157.  
  158.     for (i = 0; i < maxlocalqueuecount + 1; i++)
  159.     localqueue [i] .server = -1;
  160.     }
  161.  
  162.  
  163.  
  164. void fixstatus ()
  165.     {
  166.     //    this module fixes the apparent error in the information reported by
  167.     //    the NOSGetStatus call.
  168.     //
  169.     // Printer         ACTUAL        ACTUAL        DESIRED        DESIRED
  170.     // Status      PS_state_pause PS_state_value  PS_state_pause  PS_state_value
  171.     //
  172.     // Enabled          0x00         0x01         0x00    PS_state_multijob
  173.     // Single Job     0x01         0x00         0x00    PS_state_single_job
  174.     // Disabled       0x00         0x00         0x00    PS_disabled
  175.     // Paused          0x00         0x41         0x01         0xXX
  176.  
  177.     if ( (serverps .PS_state.PS_state_pause == 0) &&
  178.      (serverps .PS_state.PS_state_value == 0x41) )
  179.     {
  180.     serverps .PS_state.PS_state_pause = 1;
  181.     serverps .PS_state.PS_state_value = 1;
  182.     }
  183.     else if ( (serverps .PS_state.PS_state_pause == 0) &&
  184.           (serverps .PS_state.PS_state_value == 0x01) )
  185.      {
  186.      serverps .PS_state.PS_state_pause = 0;
  187.      serverps .PS_state.PS_state_value = PS_state_multijob;
  188.      }
  189.     else if ( (serverps .PS_state.PS_state_pause == 1) &&
  190.           (serverps .PS_state.PS_state_value == 0) )
  191.      {
  192.      serverps .PS_state.PS_state_pause = 0;
  193.      serverps .PS_state.PS_state_value = PS_state_single_job;
  194.      }
  195.     else if ( (serverps .PS_state.PS_state_pause == 0) &&
  196.           (serverps .PS_state.PS_state_value == 0) )
  197.      {
  198.      serverps .PS_state.PS_state_pause = 0;
  199.      serverps .PS_state.PS_state_value = PS_state_disabled;
  200.      }
  201.     }
  202.